论CTOR添加到11月BCH协议升级
作者:Jonald Fyookball
规范交易排序(CTOR)是一项计划在2018年11月比特币现金协议升级时做出的更改。比特币现金社区对这项更改进行了大量的讨论。
我之前发表过一篇文章简要说明过这项更改是什么。
尽管那篇文章解答了部分读者的疑问,并说服了他们CTOR并不危险,但其他人仍有微词并想知道这项更改是不是必要的。
许多人提出的问题是:“我们为什么要规范交易排序?我们为什么现在要规范排序?有没有其他同样可以完成规范交易排序的方案?”
我试图在本文中回答这些问题。
CTOR是一个全面的技术路线图的组成部分,旨在推动比特币现金成为全球性的点对点电子现金。更具体来说,CTOR的主要好处是可以提高区块传播的速度。同时还附带一些小的好处。
遗憾的是,很多关于CTOR的技术讨论都是在谈区块验证而不是区块传播,这让整个争论变得非常的复杂和混乱。
回顾4种不同的交易排序方案
让我们首先回顾一下4种不同的比特币现金交易排序方案。
1.TTOR 拓扑交易排序规则
这是比特币现金当前的共识规则。交易有一个部分排序规则。交易可以任意排序但是必须要进行拓扑排序,即母交易要放在子交易的前面。
2.ATOR 任意交易排序规则
这个排序规则将会移除现在的TTOR,允许交易自由排序。这个排序规则曾被当作是CTOR排序规则的替代方案进行讨论过,也是CTOR的前身。
3. GTOR加文(Gavin)的交易排序规则
这是2014年加文·安德鲁森(Gavin Andresen)提出来的。本质上就是一种规范交易排序,但是这个排序并不是强制执行的(非共识层的)且还会保留当前的TTOR规则。
4. CTOR 规范交易排序规则
这是本文提到的方案。“规范”指的是规定只允许一种排序规则。这种方案是“词典式(lexical)”或是“字典式(lexicographic)”,也就是说,除了coinbase交易外,区块里的所有交易都要按照字典顺序排序。有些人在讨论时将其称之为LTOR。
为了简明,即使从某个点来看更符合词典编撰的属性,下文也统一把这个方案称为CTOR。
区块传播
让我们从头开始说起。2014年,加文提出一个新的区块传播方式,他的想法是规范区块里的交易排序。他提案里的“秘诀”是让节点通过使用可逆的布隆查找表(IBLT) 来相互沟通,以让节点识别内存池里的交易集和其他节点之间的差别。
这个想法后来成为现在著名的石墨烯(Graphene)协议的基础。
当前所有的BCH实现方案都没有采用加文最初的排序方案,但是说明这个想法的历史根源很重要,因为CTOR目前最明显的应用就是有助于更好地实现石墨烯(Graphene)。
关于为什么要有独特的排序,一个更直观的解释就是,可以加快传播速度,节省带宽,你只需要广播遗漏的交易,不用沟通区块里已排好序的交易。规范排序有助于其他区块链传播方案的实现,例如极瘦区块(Xthin),它的好处并不仅限于石墨烯(Graphene)。
有一名开发者发表了一篇评论文章表示,CTOR对于改善区块传播并没有太大用处,因为矿工可以根据当前的规则,选择对自己的交易进行重新排序。但是,并没有解释这样如何提高效率,只给了一个帖子的链接,帖子称:“……剩下的交易完全可以随意进行重新排序。例如,按照txid进行排序……”
换句话说,不规范排序的话,矿工就可以自由选择一种规范排序?
如果他的点在于自由选择,我们稍后会再讨论这个问题。
还值得注意的是,这篇评论文章的作者(Awemany)发表文章和参加曼谷矿工会议后,改变了他对CTOR的观点……他强调,任何一项提案都不值得分裂BCH。
区块验证
CTOR方案的一个好处是简化并行区块验证。这是移除拓扑交易排序规则的结果。但是,并行验证并不是一个。即使按照当前的拓扑排序的方案,也可以并行验证。
关于区块验证的整个争论有点像是(并非出于本意的)障眼法,因为区块传播的瓶颈要比区块验证大得多。
我们重新回顾下这个话题的主要论点可能会有助于读者理解。最初辩论的过程是这样的:
反对CTOR的人认为,(至少在一个简单实现里)节点根据TTOR可以更快地验证交易,因为每笔交易的前置项都是已经处理过的。而CTOR支持者则认为,拓扑的限制是一个需要验证的额外负担(换句话说,你不能简单地把区块里的交易进行分区,然后并行处理。)
Jonathan Toomim接着发布了一个算法,演示如何通过先处理output,再处理input(例如OTI),使用现行的拓扑排序完成并行验证。
OTI的方法可以适用于TTOR和CTOR。如果是TTOR,需要在第一个循环生成每笔交易的定位图,第二个循环要确保每一笔交易只发比它自身更早的币。这里必须要进行多个循环,这使得TTOR在简单实现里的优势变成一个有争议的问题。
总的来说,TTOR和CTOR都可以并行验证。最初的测试表现大致相同。但是需要重申的是,这是次要的问题,因为CTOR显然有助于解决区块传播这个更重要的瓶颈问题。
CTOR的其他好处
CTOR还有其他一些好处。UTXO的处理也许会得到改善,因为按次序插入可以利用树结构让UTXO缓存更高效,同时提高UTXO证明(UTXO commitments)的可能性。
SPV/轻钱包可以从不包含某笔交易的证明获得好处。CTOR也可以允许使用梅克尔树结构和验证来实现路由分片。
不过第二大好处应该是简化代码。让交易自由排序,就必须要支持所有排序,
会让代码变得更加复杂。相比之下,按照字典顺序排序,区块结构每次都是相同的,测试会变得更加简单。
TTOR vs ATOR vs CTOR
有些关于区块验证的论点并不是专门针对CTOR的;更像是一个TTOR vs ATOR的问题。换句话说,我们是否应该保留这种拓扑交易排序规则,还是该移除?
有些专家已经指出,从本质上来说,交易排序并没有什么内在价值。我对此的理解是,虽然拓扑排序处理从属项是事实,但最开始创建这种排序是需要(时间)成本的。大部分开发者并不反对移除TTOR。甚至nChain那些领导开发者也是这么认为的。
另外,拓扑排序规则被移除,对于规范排序来说是一个很小的变化。这是CTOR方案背后的原则之一。在ABC实现里,在ATOR的顶部添加CTOR就是20行代码的事。
反对“中央计划”
反对CTOR的其中一个观点(似乎不成立)是,矿工应该自由选择如何排序,他们应该“竞争”用最好的方式构建区块,强迫他们执行一项命令就等于是“中央计划”。
我是所有形式的自由市场的坚定支持者。但是,矿工应该在交易排序上竞争这个想法,与在交易格式、ECDSA曲线参数,或是许多协议细节上竞争相比没有什么差别。
协议的特定部分就相当于基础设施里的“管道”。它可能会对系统产生反作用,因为所有节点也必须支持一个低效的排序方式。
反对“优化优先”原则
有些开发者(尤其是Tom Zander)表示希望继续用拓扑排序优化代码。他们不想升级或改进交易排序,因为他们认为应该探索和穷尽当前方案的所有可能性。
协议的开发不应该仅仅是因为某个开发者想要继续按照特定轨道进行探索这个理由而停滞不前。
尽管优化现行代码可能也是一种方法,但这未必是最好的方法。我们最终必须选择一条明确的道路,即使这意味着要放弃其他的道路。
更重要的是,这种方法优先考虑在选择正确数据结构上进行优化,这与计算机编程的最佳实践背道而驰的。18
发展路线图
Bitcoin ABC发布了一个技术路线图,详述了如何改进协议,以实现我们的目标,让BCH更好地扩容、拥有更好的实用性和可扩展性。
CTOR在这张路线图上是一个很小但很重要的组成部分。
尽管比特币现金社区的规模要比Bitcoin ABC大得多,但应该指出的是,自2017年11月召开多方会议后,ABC的发展路线图与其他各个团队发表的路线图声明是一致的。实际上,规范交易排序方案与nChain在2017年12月提出的路线图完全一样的。20
从整体出发的方法也许是最好的
我们不应该把CTOR当作一个独立的协议更改来进行评估,而是当作Bitcoin ABC作先锋计划周详的技术方案里一个不可缺少的组成部分。
BCH协议扩容不是只有一种方法,但采用一种从整体出发的合理方案更可行,而不是采用基于相互孤立的更改和“hacky”fixes的方案。
例如,我们可以使用GTOR得到规范交易排序所带来的一些好处,但是它需要在重建石墨烯区块的过程中进行一次拓扑排序,这样会变得更加复杂。
还可以选择实现OTI算法,在使用拓扑排序的情况下进行并行验证,但是如果CTOR就能做到这点,提供切实的好处并简化代码,那么为什么要采取这种迂回的方式呢?
CTOR是一项安全且经过验证的协议更改吗?
正如在“ELI5 article”文中解释的,从根本上来说,使用不同的交易排序并不是一项重大改变。
虽然进行更多的测试和基准测试是好事,但是建立正确的数据结构,我们才能着手下一步的开发工作。几个团队花数个月的时间在不保证以后还会存在的协议更改基础上进行开发工作,这是不切实际的。
大部协议更改都要在风险与回报之间做取舍。我曾看到过一条误导人的评论,更改应该在测试网上经过3-5年的验证才能进行部署。但是,过度谨慎,超出了合理的范围,想要以此来降低风险,这并不是个明智的做法。
我们正在与传统的支付方案以及其他的加密货币在竞争,我们还在与自身竞争,要在区块奖励减半之前扩大交易量。我们需要深思熟虑预测可能带来的风险,但是这也可能会让我们停滞不前。
CTOR添加到路线图上已经有近1年的时间,并且多年来已经进行过大量的讨论。
作为一个对现行系统的挑战者,我们必须要优于这个系统一个数量级。我们必须要尽早为扩容建立技术基础,这样企业和应用才会有信心选择BCH这个平台。
最后,BCH压力测试期间收集到的数据里可以找到确凿的证据,证明石墨烯(Graphene)将极大从CTOR受益。
结论
CTOR提案引发了大量的争论、讨论和混乱。重新审视之后,CTOR看起来是一项明智的更改,有明显的好处,没有明显的缺陷。它是经过规划的BCH扩容发展路线图的组成部分。矿工、开发者、用户以及企业都应该支持将其加入到2018年11月进行的协议升级。
注脚
Jonald Fyookball, “An ELI5 on Canonical Transaction Ordering”
Mengerian, Bitcoin Forum
Bitcoin Unlimited, Bitcoin Cash Development and Testing Accord
Gavin Andresen, O(1) Block Propagation
Ozisik, Andresen, Bissias, Houmansadr, Levine, “Graphene: A New Protocol for Block Propagation Using Set Reconciliation”
u/awemany, “A Opinionated Critique of the Canonical Transaction Ordering for Bitcoin”
Tom Zander, Bitcoin Forum
u/awemany, r/btc
u/jtoomim, r/btc
Jonathan Toomim “Canonical block order, or: How I learned to stop worrying and love the DAG”
Jtoomim “Use output-then-input block validation before fork (with tests)”
u/jtoomin, r/btc
Shammah Chancellor, “Sharding Bitcoin Cash”
Jason Cox, “Benefits of Canonical Transaction Order”
Sergio Demian Lerner, twitter
Otaci, Bitcoin Forum
Deadalnix, implement canonical transaction ordering
Linus Torvald, git mailing list
Bitcoin ABC, “The Bitcoin ABC Vision”
nChain, Bitcoin Cash Development & Testing Accord
Chris Pacia, r/btc
(欢迎加我微信号:HSL13116885 加入我的知识星球)
另请阅读:可再高速发展十年的区块链架构——虫洞协议在比特现金网络部署具有无限可扩展性的智能合约层
上一篇:合法合规稳定加密数字货币GUSD是一个影响世界政治经济格局的大事件——恭喜以太坊